package projeto.lp2.grupo6.testes;

import org.junit.Assert;
import org.junit.Test;

import projeto.lp2.grupo6.logica.Estabelecimento;
import projeto.lp2.grupo6.logica.Opiniao;
import projeto.lp2.grupo6.logica.TipoDeAlmocoServido;

public class OpiniaoTest {

    Opiniao op1;
    Opiniao op2;

    @Test
    public void testOpiniao() {
        try {
            op1 = new Opiniao(null, 0);
        } catch (Exception e) {
            Assert.assertEquals(e.getMessage(), "Erro em estabelecimento nulo");
        }
        try {
            op1 = new Opiniao(null, 0);
        } catch (Exception e) {
            Assert.assertEquals(e.getMessage(), "Erro em estabelecimento nulo");
        }
        try {
            op1 = new Opiniao(
                    new Estabelecimento("nome estabelecimento 1", "endereco estabelecimento 1", TipoDeAlmocoServido.A_LA_CARTE), -33);
        } catch (Exception e) {
            Assert.assertEquals(e.getMessage(), "Nota invalida");
        }
        try {
            op1 = new Opiniao(
                    new Estabelecimento("nome estabelecimento 1", "endereco estabelecimento 1", TipoDeAlmocoServido.A_LA_CARTE), -3);
            op2 = new Opiniao(
                    new Estabelecimento("nome estabelecimento 2", "endereco estabelecimento 2", TipoDeAlmocoServido.SELF_SERVICE), 5);
        } catch (Exception e) {
            Assert.fail("Nao esperava erro em opiniao criada corretamente");
        }
    }

    @Test
    public void testGetUsuario() {
        try {
            op1 = new Opiniao(
                    new Estabelecimento("nome estabelecimento 1", "endereco estabelecimento 1", TipoDeAlmocoServido.A_LA_CARTE), -3);
        } catch (Exception e) {
            Assert.fail("Erro em getUsuario");
        }
    }

    @Test
    public void testGetEstabelecimento() {
        try {
            Estabelecimento e1 = new Estabelecimento("nome estabelecimento 1",
                    "endereco estabelecimento 1", TipoDeAlmocoServido.A_LA_CARTE);

            op1 = new Opiniao(e1, -3);
            Assert.assertTrue(op1.getEstabelecimento().equals(e1));
        } catch (Exception e) {
            Assert.fail("Nao esperava erro em getEstabelecimento");
        }
    }

    @Test
    public void testGetNota() {
        try {
            op1 = new Opiniao(
                    new Estabelecimento("nome estabelecimento 1", "endereco estabelecimento 1", TipoDeAlmocoServido.A_LA_CARTE), -3);
            Assert.assertEquals(op1.getNota(), -3);
        } catch (Exception e) {
            Assert.fail("Nao esperava erro em getNota");
        }
    }

    @Test
    public void testSetNota() {
        try {
            op1 = new Opiniao(
                    new Estabelecimento("nome estabelecimento 1", "endereco estabelecimento 1", TipoDeAlmocoServido.A_LA_CARTE), -3);
            Assert.assertEquals(op1.getNota(), -3);
            op1.setNota(33);
        } catch (Exception e) {
            Assert.assertEquals(e.getMessage(), "Nota invalida");
        }
        try {
            op1 = new Opiniao(
                    new Estabelecimento("nome estabelecimento 1", "endereco estabelecimento 1", TipoDeAlmocoServido.A_LA_CARTE), -3);
            Assert.assertEquals(op1.getNota(), -3);
            for (int i = -5; i < 6; i++) {
                op1.setNota(i);
            }
        } catch (Exception e) {
            Assert.fail("Nao esperava erro em setNota");
        }
    }
}
